perm filename DSKMON[SS,SYS] blob
sn#359078 filedate 1978-06-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE DSKMON DISK STATISTICS MONITOR
C00004 00003 GO: RESET
C00006 00004 SWR: JRST 2,@[.+1] LEAVE IOT USER MODE
C00013 00005 DPERCNT:IDIVI A,=100
C00016 00006 IFN OLDDSK,<
C00022 ENDMK
C⊗;
TITLE DSKMON DISK STATISTICS MONITOR
OLDDSK←←0 ;-1 TO ASSEMBLE FOR OLD SYSTEM WITH DISK QUEUE
A←1
B←2
C←3
D←4
E←5
T←6
TT←7
Q←10
DDB←11
DAT←12
S←13
L←14
P←17
DDPMAX←←1000 ;MAXIMUM SIZE OF DATA DISK PROGRAM
FLINE←←3 ;FIRST TEXT LINE TO DISPLAY ON
FSLINE←←3*=12 ;FIRST SCAN LINE
DEFINE CW (OP1,D1,OP2,D2,OP3,D3) <
BYTE (8) D1,D2,D3 (3) OP1,OP2,OP3,4
>
FN←←1
CH←←2
COL←←3
HILINE←←4
LOLINE←←5
HS←←400000 ;FOR REFERENCES TO SYSTEM CORE
DEFINE INFORM (A,B) <
PRINTS /A=B
/
>
DEFINE DDCLR (ADR,NWDS) <
ZZ←←0
REPEAT NWDS,<
ADR+ZZ
ZZ←←ZZ+1
>
>
;LOW CORE POINTERS
CHKBEG←←223
SYSTOP←←265
GO: RESET
MOVE P,[-100,,PDL-1]
SETZM FREEZE
PUSHJ P,SYMLK ;LOOKUP SYSTEM SYMBOLS
DPYSIZ 2*1000+2
DPYPOS -600
MOVEI A,CHKBEG
PEEK A,
MOVEI A,233000 ;KLUDGE TO GET PATCH AREA
MOVEM A,SLOPC
LSH A,-9 ;# LO PIECE PAGES
MOVEI B,SYSTOP
PEEK B,
PEEK B,
MOVEM B,FHIADR
LSH B,-9+5 ;STARTING HI PIECE PAGE # * 40
ADDI B,10 ;SET 2-PEICE FLAG
HRL B,A
GETHI B,
JRST 4,.
SETOM SWCNT
MOVE A,[400017,,SWR]
SKIPN DEBUG
SPCWGO A, ;START UP SPACEWAR
SKIPE DEBUG
JRST SWR
MLOOP: INCHRW A
; TRNN A,600
; JRST MLOOP
LDB B,[POINT 7,A,35]
CAIL B,"a"
CAILE B,"z"
CAIA
SUBI B,40
CAIN B,"E"
PUSHJ P,EXT
CAIN B,40
SETCMM FREEZE
JRST MLOOP
EXT: SPCWAR 'SSW' ;KILL THE SPACEWAR MODULE
PUSH P,DDCLRS+1
SETZM DDCLRS+1
DDUPG DDCLRS ;WAIT FOR SPACE WAR LEVEL TRANSFER TO FINISH
POP P,DDCLRS+1
DDUPG DDCLRS ;CLEAR THE SCREEN
RESET ;RESET THE WORLD
EXIT
SWR: JRST 2,@[.+1] ;LEAVE IOT USER MODE
SKIPE FREEZE
JRST SWXIT
SKIPE DEBUG
JRST SWDEB
AOSE SWCNT
DISMIS
MOVNI A,4
MOVEM A,SWCNT
SWDEB: MOVE P,[-100,,SPWPDL-1]
PUSHJ P,SYMEXM ;EXAMINE SYSTEM SYMBOLS
PUSHJ P,DDPSET
IFN OLDDSK,<
MOVE Q,[-DDPMAX,,DDPRG1-1]
>;IFN OLDDSK
PUSHJ P,MKDIS
IFN OLDDSK,<
PUSHJ P,CLRRST ;CLEAR THE REST OF THE LINES
PUSH Q,[0]
HLRO Q,Q
ADDI Q,DDPMAX+DDPRG1-DDPROG+1 ;SIZE OF DISPLAY PROGRAM
>;IFN OLDDSK
IFE OLDDSK,<
MOVEI Q,DDPEND-DDPROG
>;IFE OLDDSK
MOVEM Q,DDLWRD ;STORE IN HEADER
DDUPG DDHEAD
SWXIT: SKIPN DEBUG
DISMIS
JRST SWR
MKDIS: MOVE A,NSWPOP
MOVE D,[440700,,DSWPOP]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
MOVE A,NTSTAR
MOVE D,[440700,,DTSTAR]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
MOVE A,NSWPOP
MOVE B,NTSTAR
ADD B,A
IMULI A,=10000
IDIV A,B
MOVE D,[440700,,DPER1]
PUSHJ P,DPERCNT
PUSHJ P,DCRLF
REPEAT 0,<
MOVE A,SWPTWC
MOVE D,[440700,,DSWPTW]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
MOVE A,DSKTWC
MOVE D,[440700,,DDSKTW]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
>;REPEAT 0
MOVE A,SWPTWC
MULI A,=10000
MOVE C,SWPTWC
ADD C,DSKTWC
DIV A,C
MOVE D,[440700,,DPER2]
PUSHJ P,DPERCNT
PUSHJ P,DCRLF
MOVE A,SWPTWC
IDIV A,NSWPOP
MOVE D,[440700,,DSIZ1]
PUSHJ P,DDECOUT
MOVEI A,[ASCIZ / WORDS
/]
PUSHJ P,DTYPE
MOVE A,DSKTWC
IFN OLDDSK,<
SUB A,SWPTWC
>;IFN OLDDSK
IDIV A,NTSTAR
MOVE D,[440700,,DSIZ2]
PUSHJ P,DDECOUT
MOVEI A,[ASCIZ / WORDS
/]
PUSHJ P,DTYPE
DMOVE D,DKTIME
DIV D,[10000*=1000000] ;CONVERT TO SECONDS
MOVE A,SWPTWC
ADD A,DSKTWC ;TOTAL WORDS TRANSFERRED
IDIV A,D ;AVERAGE TRANSFER RATE
MOVE D,[440700,,DRATE]
PUSHJ P,DDECOUT
MOVEI A,[ASCIZ \ W/S
\]
PUSHJ P,DTYPE
MOVE A,NJRNUL
SUB A,LNJRNUL
MOVE B,UPTIME
SUB B,LUPTIME
IMULI A,=100
IDIV A,B ;% OF RECENT UPTIME THAT WAS WASTED
MOVE D,[440700,,DPER3]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
MOVE A,NWSCHED
SUB A,LNWSCHED
IMULI A,=100
MOVE B,UPTIME
SUB B,LUPTIME
IDIV A,B
MOVE D,[440700,,DPER4]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
MOVE A,NWSCHED
IMULI A,=100
IDIV A,UPTIME
MOVE D,[440700,,DPER5]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
MOVE A,DQCNT
MOVE D,[440700,,DQLEN]
PUSHJ P,DDECOUT
PUSHJ P,DCRLF
IFN OLDDSK,<
MOVEI L,FQLIN
PUSHJ P,DINI
PUSHJ P,DQUEUE
>;IFN OLDDSK
POPJ P,
IFN OLDDSK,<
DTAB: MOVEI B,40
PUSHJ P,.+1
PUSHJ P,.+1
PUSHJ P,DCHR
DCHR: IDPB B,D
TLNE D,760000
POPJ P,
PUSH Q,DWORD
DINI: SETZM DWORD
AOS DWORD
MOVE D,[POINT 7,DWORD]
POPJ P,
DFIN: MOVE A,DWORD
ANDCMI A,1
JUMPE A,CPOPJ
PUSH Q,DWORD
POPJ P,
DEXT: HLRZ A,A
SKIPA C,[POINT 6,A,17]
DNAM: MOVE C,[POINT 6,A]
DNAM1: ILDB B,C
ADDI B,40
PUSHJ P,DCHR
TLNE C,770000
JRST DNAM1
MOVEI B,"."
POPJ P,
DPPN: MOVEI B,"["
PUSHJ P,DCHR
PUSH P,A
PUSHJ P,DEXT
MOVEI B,","
PUSHJ P,DCHR
POP P,A
HRLZ A,A
PUSHJ P,DEXT
MOVEI B,"]"
JRST DCHR
DEOL: MOVEI B,15
PUSHJ P,DCHR
MOVEI B,12
AOJA L,DCHR
DDEC: PUSH P,OUTXCT
MOVE B,[PUSHJ P,DCHR]
MOVEM B,OUTXCT
PUSHJ P,DECOUT
POP P,OUTXCT
POPJ P,
DOCT: PUSH P,OUTXCT
MOVE B,[PUSHJ P,DCHR]
MOVEM B,OUTXCT
PUSHJ P,OCTOUT
POP P,OUTXCT
POPJ P,
DQUEUE: SKIPN T,DQCNT ;SIZE OF DISK QUEUE
POPJ P,
MOVE TT,MOPTR
SUB TT,AQBEGIN ;RELATIVE OUTPUT POINTER
MOVE S,TT ;REMEMBER WHERE WE STARTED
DQUE1: SKIPN C,QBEGIN(TT) ;GET DISK QUEUE ENTRY
JRST DQUE2
HLRZ DDB,C
HRRZ DAT,C
SKIPN A,@NAMPTR
JRST DQUE2
PUSHJ P,DNAM
SKIPN A,@EXTPTR
JRST DQUE1A
PUSHJ P,DCHR ;PRINT THE DOT
PUSHJ P,DEXT
DQUE1A: MOVE A,@PPNPTR
PUSHJ P,DPPN
PUSHJ P,DTAB
PUSHJ P,PSUBR
PUSHJ P,DEOL
SOJLE T,CPOPJ
DQUE2: ADDI TT,1
CAIN TT,QEND-QBEGIN
MOVEI TT,0
CAIE TT,(S) ;SKIP IF WE HAVE LOOPED BACK TO WHERE WE STARTED
JRST DQUE1
POPJ P,
CLRRST: SUBI L,=35 ;- NUMBER OF LINES TO CLEAR
CLRRS1: MOVEI B,40
PUSHJ P,DCHR
MOVEI B,15
PUSHJ P,DCHR
MOVEI B,12
PUSHJ P,DCHR
AOJL L,CLRRS1
PUSHJ P,DFIN
POPJ P,
PSUBR: MOVSI A,-NSUBRS
PSUBR1: CAME DAT,SBRVAL(A)
AOBJN A,PSUBR1
JUMPL A,PSUBR2 ;JUMP IF FOUND
MOVE A,DAT
JRST DOCT
PSUBR2: MOVE A,SBRNAM(A)
JRST DNAM
>;IFN OLDDSK
DPERCNT:IDIVI A,=100
PUSH P,B
PUSHJ P,DDECOUT
MOVEI A,"."
IDPB A,D
POP P,A
MOVEI B,"0"
CAIGE A,=10
IDPB B,D
JRST DDECOUT
SYMLK: MOVSI A,-NSYMS
SYMLK1: MOVE B,SYMNAM(A)
MOVE C,BLKNAM(A)
MOVEI D,B
.SYML D,
JRST 4,. ;LOST
MOVEM D,SYMVAL(A)
AOBJN A,SYMLK1
CPOPJ: POPJ P,
SYMEXM: MOVSI A,-NSAVTB
SYMEX0: HLRZ B,SAVTB(A)
HRRZ C,SAVTB(A)
MOVE B,(B)
MOVEM B,(C)
AOBJN A,SYMEX0
MOVSI A,-NEVALS
SYMEX1: HLRZ B,EVALTB(A)
MOVE B,(B) ;GET ADDRESS OF SYSTEM SYMBOL
MOVE B,HS(B) ;GET CONTENTS OF ADDRESS IN SYSTEM
HRRZ C,EVALTB(A)
MOVEM B,(C)
AOBJN A,SYMEX1
MOVE B,ADKTIME
DMOVE B,HS(B) ;GET DOUBLE WORD TIME
DMOVEM B,DKTIME
IFN OLDDSK,<
HRLZ A,AQBEGIN
ADD A,[HS,,QBEGIN]
BLT A,QBEGIN+27
MOVE A,SLOPC ;NUMBER OF WORDS IN GETHI LOW PIECE
ADDI A,HS ;STARTING ADDRESS OF GETHI HI PIECE
SUB A,FHIADR ;SUBTRACT OFFSET OF SYSTEM ADDRESS OF HI PIECE
HRLI A,DDB
MOVE B,A
ADD B,AFILNAM
MOVEM B,NAMPTR
MOVE B,A
ADD B,AFILEXT
MOVEM B,EXTPTR
MOVE B,A
ADD B,AFILPPN
MOVEM B,PPNPTR
>;IFN OLDDSK
POPJ P,
DDPSET: MOVSI A,-NDDCLR
MOVEI B,1
DDPSE1: MOVEM B,@DDPCTB(A)
AOBJN A,DDPSE1
POPJ P,
DCRLF: MOVEI A,[BYTE (7) 15,12]
DTYPE: HRLI A,440700
DTYPE1: ILDB B,A
JUMPE B,CPOPJ
IDPB B,D
JRST DTYPE1
DDECOUT:PUSH P,OUTXCT
MOVE B,[IDPB B,D]
MOVEM B,OUTXCT
PUSHJ P,DECOUT
POP P,OUTXCT
POPJ P,
DECOUT: PUSH P,C
MOVEI C,=10
PUSHJ P,NUMOUT
POP P,C
POPJ P,
OCTOUT: PUSH P,C
MOVEI C,10
PUSHJ P,NUMOUT
POP P,C
POPJ P,
NUMOUT: IDIVI A,(C)
JUMPE A,NUMOU1
HRLM B,(P)
PUSHJ P,NUMOUT
HLRZ B,(P)
NUMOU1: ADDI B,"0"
XCT OUTXCT
POPJ P,
IFN OLDDSK,<
DEFINE ISYMS
<FOR I IN (NTSTAR,NSWPOP,DSKTWC,SWPTWC,DQCNT,QBEGIN,MIPTR,MOPTR,FILNAM,<FILEXT>
,FILPPN,DKTIME,NJRNUL,UPTIME,NWSCHED)>
>;IFN OLDDSK
IFE OLDDSK,<
DEFINE ISYMS
<FOR I IN (NTSTAR,NSWPOP,DSKTWC,SWPTWC,DQCNT,FILNAM,<FILEXT>
,FILPPN,DKTIME,NJRNUL,UPTIME,NWSCHED)>
>;IFE OLDDSK
IFN OLDDSK,<
DEFINE ISUBRS
<FOR I IN (LOOKI,DIDMPI,DMPIBI,DIDMPO,DMPOBI,DRAUFY,DRAUFD,DCLOI,SPREAD,<DIRSRC>
,DIRI1,DIRI2,GGRETI,RB4WCK,DELFIL,DIBUFI,DIBUFO,DCLSO5,DRINT,DRINT1,SATOUT)>
>;IFN OLDDSK
DEFINE SYMS (J)
<IFDIF <J><UNUSED><RADIX50 0,J>>
SYMNAM: ISYMS <SYMS(I)
>
IFN OLDDSK,<
ISUBRS <SYMS(I)
>
>;IFN OLDDSK
NSYMS←←.-SYMNAM
BLKNAM: REPEAT 5,<0>
IFN OLDDSK,<REPEAT 3,<0>>
REPEAT 3,<RADIX50 0,WAITS>
REPEAT NSYMS-5-IFN OLDDSK,<3->3,<0>
DEFINE SYMS ! (J)
<IFDIF <J><UNUSED><A!J:0>>
DEFINE SYMS1 (J)
<IFDIF <J><UNUSED><0>>
SYMVAL::ISYMS <SYMS(I)
>
IFN OLDDSK,<
SBRVAL: ISUBRS <SYMS1(I)
>
NSUBRS←←.-SBRVAL
DEFINE SYMS (J)
<IFDIF <J><UNUSED><SIXBIT /J/>>
SBRNAM: ISUBRS <SYMS(I)
>
>;IFN OLDDSK
EVALTB: ANTSTAR,,NTSTAR
ANSWPOP,,NSWPOP
ADSKTWC,,DSKTWC
ASWPTWC,,SWPTWC
ADQCNT,,DQCNT
IFN OLDDSK,<
AMIPTR,,MIPTR
AMOPTR,,MOPTR
>;IFN OLDDSK
ANJRNUL,,NJRNUL
AUPTIME,,UPTIME
ANWSCHED,,NWSCHED
NEVALS←←.-EVALTB
SAVTB: NJRNUL,,LNJRNUL
UPTIME,,LUPTIME
NWSCHED,,LNWSCHED
NSAVTB←←.-SAVTB
NTSTAR: 0
NSWPOP: 0
DSKTWC: 0
SWPTWC: 0
DQCNT: 0
DKTIME: BLOCK 2
NJRNUL: 0
LNJRNUL:0
UPTIME: 0
LUPTIME:0
NWSCHED:0
LNWSCHED:0
IFN OLDDSK,<
QBEGIN: BLOCK 30 ;COPY OF THE SYSTEM'S DISK QUEUE
QEND::
MIPTR: 0
MOPTR: 0
>;IFN OLDDSK
PDL: BLOCK 100
SPWPDL: BLOCK 100
SWCNT: 0
DEBUG: 0
SLOPC: 0 ;NUMBER OF WORDS IN GETHI LOW PIECE
FHIADR: 0 ;FIRST SYSTEM ADDRESS IN GETHI HI PIECE
OUTXCT: OUTCHR B
NAMPTR: 0
EXTPTR: 0
PPNPTR: 0
FREEZE: 0
DDHEAD: 600000,,DDPROG
DDLWRD: 0
0
DDPRGL
DDPROG: CW(FN,46,FN,46,FN,46)
DDPRGL: CW(COL,2,HILINE,FSLINE⊗-4,LOLINE,FLINE&17)
ASCID / DSKMON Disk statistics monitoring program
NUMBER OF SWAP OPS = /
DSWPOP: BLOCK 3 ;ROOM FOR 11 DIGITS, CR AND LF
ASCID /NUMBER OF OTHER DISK OPS = /
DTSTAR: BLOCK 3
ASCID /PERCENTAGE OF SWAP OPS = /
DPER1: BLOCK 3
REPEAT 0,<
ASCID /TOTAL WORDS SWAPPED = /
DSWPTW: BLOCK 3
ASCID /TOTAL WORDS TRANSFERRED = /
DDSKTW: BLOCK 3
>;END REPEAT 0
ASCID /PERCENTAGE OF WORDS SWAPPED = /
DPER2: BLOCK 3
ASCID /AVERAGE SWAP TRANSFER SIZE = /
DSIZ1: BLOCK 3
ASCID /AVERAGE DISK TRANSFER SIZE = /
DSIZ2: BLOCK 3
ASCID /AVERAGE DISK TRANSFER RATE = /
DRATE: BLOCK 3
ASCID /PERCENTAGE OF WASTED TICKS = /
DPER3: BLOCK 3
ASCID /WSCHEDS PER 100 TICKS = /
DPER4: BLOCK 3
ASCID /AVG WSCHEDS PER 100 TICKS = /
DPER5: BLOCK 3
ASCID /DISK QUEUE LENGTH = /
DQLEN: BLOCK 3
IFN OLDDSK,<
ASCID /DISK QUEUE:
/
FQLIN←←=12+FLINE
DDPRG1: BLOCK DDPMAX
>;IFN OLDDSK
0
DDPEND::
DWORD: 0
DDPCTB: DDCLR DSWPOP,3
DDCLR DTSTAR,3
DDCLR DPER1,3
; DDCLR DSWPTW,3
; DDCLR DDSKTW,3
DDCLR DPER2,3
DDCLR DSIZ1,3
DDCLR DSIZ2,3
DDCLR DRATE,3
DDCLR DQLEN,3
DDCLR DPER3,3
DDCLR DPER4,3
DDCLR DPER5,3
NDDCLR←←.-DDPCTB
DDCLRS: DDCLRP
2
0
0
DDCLRP: CW(FN,17,CH,0,CH,0)
0
END GO